Thực đơn
Code cave Ví dụVí dụ sau đây nói về use case đơn giản nhất của code cave: chèn lệnh vào đó và làm sao để nó thực thi trước khi phần lệnh chính của chương trình được thực thi.
Giả sử cho một file thực thi được thể hiện bằng mã x86, cùng với một vùng "code cave", đơn giản như sau:
; Giả định chương trình sử dụng thư viện C và chạy 64 bitglobal mainextern putssection .textmain: ; fastcall mov rdi, message ; đưa địa chỉ của chuỗi văn bản vào tham số thứ nhất call puts ; puts(message) ret ; Giả sử ở đây có một vùng code cave khá lớn sau khi biên dịch chương trình message: db "Hello world", 0
Biên dịch ra file thực thi và chạy nó, trên màn hình dòng lệnh sẽ hiển thị dòng chữ "Hello world".
Người ta có thể chỉnh sửa trực tiếp vào file thực thi này, thông qua các công cụ disassembly, theo cách như sau:
Có thể sử dụng các lệnh chỉ thị CALL và RET để đơn giản bớt công việc này. Chẳng hạn như sau:
global mainextern putssection .textmain: call payload ; chuyển hướng xuống code cave (ghi đè lệnh chỉ thị có sẵn) call puts ret ; Bắt đầu code caveinject_message: db "Injected", 0payload: mov rdi, inject_message call puts mov rdi, message ; khôi phục lại lệnh chỉ thị bị ghi đè ở bên trên ret ; quay trở lại code chính; Kết thúc code cavemessage: db "Hello world", 0
Sau khi làm thế xong, khi chạy chương trình thì màn hình dòng lệnh sẽ hiện ra dòng chữ "Injected" trước, sau đó mới là "Hello world".
Thực đơn
Code cave Ví dụLiên quan
Code Code Geass Codein Codex Code Kunst CodeIgniter Codename: Panzers – Cold War Codex Seraphinianus Codex Gigas Codename Sailor VTài liệu tham khảo
WikiPedia: Code cave https://www.codeproject.com/Articles/20240/The-Beg... https://github.com/axcheron/pycave https://progamercity.net/ghack-tut/164-guide-theor... https://web.archive.org/web/20140407092835/http://... https://web.archive.org/web/20140418133526/http://...